package pl.edu.pw.elka.jtrzasko.proz.warcaby.figures;

import java.io.Serializable;

import pl.edu.pw.elka.jtrzasko.proz.warcaby.model.Board;
import pl.edu.pw.elka.jtrzasko.proz.warcaby.model.Position;

/**
 * Klasa zawiera infomacje o typach figur jakie moga znajdowac sie na planszy.
 * 
 */
public abstract class Figure implements Serializable
{
	
	public Figure(FigureColor color, Position position) {
		this.color = color;
		this.position = position;
	}

	/**
	 * Kolor figury
	 */
	protected FigureColor color;
	/**
	 * Pozycja pola na ktorej figura sie znajduje
	 */
	protected Position position;
	
	/**
	 * Pobiera kolor fogury
	 * 
	 * @return Kolor figury
	 */
	public FigureColor getColor()
	{
		return color;
	}

	/**
	 * Pobiera pozycje figury na planszy
	 * 
	 * @return Pozycja figury na planszy
	 */
	public Position getPosition()
	{
		return position;
	}

	/**
	 * Ustawia pozycje figuy na planszy
	 * 
	 * @param position
	 *            Pozycja figury na planszy
	 */
	public void setPosition(Position position)
	{
		this.position = position;
	}

	/**
	 * Sprwdza czy ruch jest poprawny dla danej figury
	 * 
	 * @param p2
	 *            Pozycja docelowa
	 * @param board
	 *            Plansza na ktorej wykonywany jest ruch
	 * @return Pradwa jesli ruch jest mozliwy
	 */
	public abstract boolean isMoveValid(Position p2, Board board);

	/**
	 * Sprwdza czy bicie jest poprawne dla danej figury
	 * 
	 * @param p2
	 *            Pozycja docelowa
	 * @param board
	 *            Plansza na ktorej wykonywane jest bicie
	 * @return Pradwa jesli bicie jest mozliwe
	 */
	public abstract boolean isBeatingValid(Position p2, Board board);

	/**
	 * Sprawdza czy jest moliwa promocja danej figury
	 * @param board Plansza na ktorej wykonywana jest promocja
	 * @return Prawda jesli promocja jest mozliwa
	 */
	public abstract boolean isPromotionValid(Board board);
}
